
#ifndef _TTG_DEVICES_GPU_CUDA_CUDAPROPS_
#define _TTG_DEVICES_GPU_CUDA_CUDAPROPS_
#include "Common/Definitions.h"

namespace ttg
{
	namespace devices
	{
		//Analogue of cudaDeviceProp (stolen from NVidia CUDA SDK to avoid SDK dependency).
		//Contains information about one CUDA-device.
		class CudaProps
		{
			public:
				//Maximum number of threads per block.
				int maxThreadsPerBlock;
				//Maximum size of each dimension of a block.
				int maxThreadsDim[3];
				//Maximum size of each dimension of a grid.
				int maxGridSize[3];
				//Shared memory available per block in bytes.
				int sharedMemPerBlock;
				//Constant memory available on device in bytes.
				int totalConstantMemory;
				//Warp size in threads.
				int SIMDWidth;
				//Maximum pitch in bytes allowed by memory copies.
				int memPitch;
				//32-bit registers available per block.
				int regsPerBlock;
				//Clock frequency in kilohertz.
				int clockRate;
				//Alignment requirement for textures.
				int textureAlign;
			public:
				//ASCII string identifying device.
				std::string name;
				//Major compute capability.
				int major;
				//Minor compute capability.
				int minor;
				//Global memory available on device in bytes.
				size_t totalGlobalMem;
		};
	}
}

#endif
